import glob
import win32com.client
import os
import time

def convert_excel_auto(input_path, output_folder=None, force=False):
    """
    Excel文件自动转换核心方法

    参数：
    input_path: 输入文件路径（支持通配符）
    output_folder: 输出目录（默认同输入目录）
    force: 强制覆盖已存在文件
    """
    # 标准化输入路径
    abs_input = os.path.abspath(input_path)
    if not os.path.exists(abs_input):
        print(f"错误：输入文件不存在 - {abs_input}")
        return

    # 获取文件信息
    file_ext = os.path.splitext(abs_input)[1].lower()
    if file_ext == '.xls':
        target_format = 'xlsx'
    elif file_ext == '.xlsx':
        target_format = 'xls'
    else:
        print(f"错误：不支持的文件格式 - {file_ext}")
        return

    # 处理输出目录
    if output_folder:
        output_folder = os.path.abspath(output_folder)
    else:
        output_folder = os.path.dirname(abs_input)
    
    # 创建输出目录（如果不存在）
    os.makedirs(output_folder, exist_ok=True)

    wps = win32com.client.Dispatch("ket.Application")
    wps.Visible = False

    try:
        workbook = wps.Workbooks.Open(abs_input)
        
        # 构造输出路径
        filename = os.path.splitext(os.path.basename(abs_input))[0]
        output_path = os.path.join(output_folder, f"{filename}.{target_format}")

        if os.path.exists(output_path) and not force:
            print(f"文件已存在，跳过转换：{output_path}")
            return

        # 设置保存格式代码
        format_code = 51 if target_format == 'xlsx' else 56
        workbook.SaveAs(output_path, format_code)
        print(f"转换成功：{output_path}")

    except Exception as e:
        print(f"转换失败：{str(e)}")

    finally:
        if 'workbook' in locals():
            workbook.Close(False)
            del workbook
        if 'wps' in locals():
            wps.Quit()
            del wps
        time.sleep(1)

if __name__ == "__main__":
    import argparse
    parser = argparse.ArgumentParser(description='Excel文件转换工具 XLS ↔ XLSX')
    parser.add_argument('input', help='输入路径（支持通配符和相对路径）')
    parser.add_argument('-o', '--output', help='输出目录（绝对/相对路径）')
    parser.add_argument('-f', '--force', action='store_true', help='强制覆盖模式')

    args = parser.parse_args()
    
    # 处理通配符并标准化路径
    matched_files = glob.glob(args.input)
    if not matched_files:
        print(f"错误：未找到匹配文件 - {args.input}")
        exit(1)

    # 预先创建输出目录（如果指定了自定义目录）
    if args.output:
        os.makedirs(os.path.abspath(args.output), exist_ok=True)

    for file in matched_files:
        convert_excel_auto(file, args.output, args.force)